﻿/*
SINACOR - BMF&Bovespa
Arquivo: ValidaExclusaoTabelaCorretagem.cs
Criado em: 20-out-2009 11:31:40
Arquiteto Responsável: WGeneroso.prg
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation.BusinessRules;
using Sinacor.Infra.Common.Validation;

namespace Sinacor.Servico.Bovespa.Corretagem.BusinessLogic.BusinessRuleValidation
{
    /// <summary>
    /// Valida se a tabela de corretagem pode ser excluída
    /// </summary>
    public class ValidaExclusaoTabelaCorretagem : BaseBusinessRuleValidation<BusinessEntity.TabelaCorretagem>, IBusinessRuleValidation
    {
        #region Atributos

        private int _erroObjetoNulo = 109519;
        private int _existemDependencias = 109373;

        #endregion

        #region Propriedades

        public int ErroObjetoNulo
        {
            get { return this._erroObjetoNulo; }
            set { this._erroObjetoNulo = value; }
        }

        public int ExistemDependencias
        {
            get { return this._existemDependencias; }
            set { this._existemDependencias = value; }
        }

        #endregion

        #region Construtores

        public ValidaExclusaoTabelaCorretagem() { }

        #endregion

        #region Métodos

        public void Validate()
        {
            List<BusinessEntity.PoliticaCorretagem> listaPoliticasCorretagens = null;

            if (base.EntityToValidate != null)
            {
                listaPoliticasCorretagens = new BusinessLogic.PoliticaCorretagem().ConsultarPoliticasCorretagens(new BusinessEntity.Parameter.FiltroPoliticaCorretagem
                {
                    TabelaPadrao = (base.EntityToValidate.Codigo.HasValue ? new BusinessEntity.TabelaCorretagem(){ Codigo = base.EntityToValidate.Codigo.Value} : null)
                });

                if ((listaPoliticasCorretagens != null && listaPoliticasCorretagens.Count > 0) || new ResourceAccess.VerificacaoPolitica().VerificarExisteVerificacaoTabela(base.EntityToValidate.Codigo))
                {
                    this.AddValidationError(this.ExistemDependencias);
                }
            }
            else
            {
                this.AddValidationError(this.ErroObjetoNulo);
            }
        }

        /// <summary>
        /// Captura os erros
        /// </summary>
        /// <returns>Retorno uma lista de erros</returns>
        public List<ValidationError> GetErrors()
        {
            return base.ErrorsList;
        }

        #endregion
    }
}